package xgb
import(
	"fmt"
	"strings"
	"strconv"
)



/*
.type:
*/
type PixMskT uint32
func(pixMsk PixMskT)String()string{
	return strconv.FormatUint(uint64(pixMsk), 2)
}//String



/*
.type MapStateT:
*/
type MapStateT byte
const(
	MAP_STATE_UNMAP MapStateT = iota
	MAP_STATE_UNVIEW
	MAP_STATE_VIEW
)
func(mapStat MapStateT)String()(ret string){
	switch mapStat{
	case MAP_STATE_UNMAP:
		ret="MAP_STATE_UNMAP"
	case MAP_STATE_UNVIEW:
		ret="MAP_STATE_UNVIEW"
	case MAP_STATE_VIEW:
		ret="MAP_STATE_VIEW"
	default:
		ret=fmt.Sprintf("Undefined MapStateT: %d", mapStat)
	}//switch
	return
}//String







/*
.type EvtCodT:
*/
type EvtCodT byte
const(
	EVT_COD_KEY_PRS EvtCodT = iota+2
	EVT_COD_KEY_RLS
	EVT_COD_BTN_PRS
	EVT_COD_BTN_RLS
	EVT_COD_MOTION
	EVT_COD_ENT
	EVT_COD_LV
	EVT_COD_FOC_IN
	EVT_COD_FOC_OUT
	EVT_COD_KEY_MAP // 每次EvtEnt和EvtFocusIn之后生成，一个bitmap，每bit对应一个键盘按键，指示当前按下的按键。由于键盘本身限制，当同时按下多个按键时，并非总是能识别所有按下的按键，这大概就是所谓的“按键冲突”。
	EVT_COD_EXPOSE
	EVT_COD_GRAPH_EXPOSE
	EVT_COD_NO_EXPOSE
	EVT_COD_OBSCURE_CHG
	EVT_COD_CREAT
	EVT_COD_DSTRY
	EVT_COD_UNMAP
	EVT_COD_MAP
	EVT_COD_MAP_RQST
	EVT_COD_REPARENT
	EVT_COD_CONF
	EVT_COD_CONF_RQST
	EVT_COD_GRAV
	EVT_COD_RESIZE_RQST
	EVT_COD_CIRCULATE
	EVT_COD_CIRCULATE_RQST
	EVT_COD_PROPER
	EVT_COD_SEL_CLR
	EVT_COD_SEL_RQST
	EVT_COD_SEL
	EVT_COD_COLORMAP
	EVT_COD_CLIENT_MSG
	EVT_COD_IO_MAP_CHG
)
func(evtCod EvtCodT)String()(ret string){
	switch evtCod{
	case EVT_COD_KEY_PRS:
		ret="EVT_COD_KEY_PRS"
	case EVT_COD_KEY_RLS:
		ret="EVT_COD_KEY_RLS"
	case EVT_COD_BTN_PRS:
		ret="EVT_COD_BTN_PRS"
	case EVT_COD_BTN_RLS:
		ret="EVT_COD_BTN_RLS"
	case EVT_COD_MOTION:
		ret="EVT_COD_MOTION"
	case EVT_COD_ENT:
		ret="EVT_COD_ENT"
	case EVT_COD_LV:
		ret="EVT_COD_LV"
	case EVT_COD_FOC_IN:
		ret="EVT_COD_FOC_IN"
	case EVT_COD_FOC_OUT:
		ret="EVT_COD_FOC_OUT"
	case EVT_COD_KEY_MAP:
		ret="EVT_COD_KEY_MAP"
	case EVT_COD_EXPOSE:
		ret="EVT_COD_EXPOSE"
	case EVT_COD_GRAPH_EXPOSE:
		ret="EVT_COD_GRAPH_EXPOSE"
	case EVT_COD_NO_EXPOSE:
		ret="EVT_COD_NO_EXPOSE"
	case EVT_COD_OBSCURE_CHG:
		ret="EVT_COD_OBSCURE_CHG"
	case EVT_COD_CREAT:
		ret="EVT_COD_CREAT"
	case EVT_COD_DSTRY:
		ret="EVT_COD_DSTRY"
	case EVT_COD_UNMAP:
		ret="EVT_COD_UNMAP"
	case EVT_COD_MAP:
		ret="EVT_COD_MAP"
	case EVT_COD_MAP_RQST:
		ret="EVT_COD_MAP_RQST"
	case EVT_COD_REPARENT:
		ret="EVT_COD_REPARENT"
	case EVT_COD_CONF:
		ret="EVT_COD_CONF"
	case EVT_COD_CONF_RQST:
		ret="EVT_COD_CONF_RQST"
	case EVT_COD_GRAV:
		ret="EVT_COD_GRAV"
	case EVT_COD_RESIZE_RQST:
		ret="EVT_COD_RESIZE_RQST"
	case EVT_COD_CIRCULATE:
		ret="EVT_COD_CIRCULATE"
	case EVT_COD_CIRCULATE_RQST:
		ret="EVT_COD_CIRCULATE_RQST"
	case EVT_COD_PROPER:
		ret="EVT_COD_PROPER"
	case EVT_COD_SEL_CLR:
		ret="EVT_COD_SEL_CLR"
	case EVT_COD_SEL_RQST:
		ret="EVT_COD_SEL_RQST"
	case EVT_COD_SEL:
		ret="EVT_COD_SEL"
	case EVT_COD_COLORMAP:
		ret="EVT_COD_COLORMAP"
	case EVT_COD_CLIENT_MSG:
		ret="EVT_COD_CLIENT_MSG"
	case EVT_COD_IO_MAP_CHG:
		ret="EVT_COD_IO_MAP_CHG"
	default:
		ret=fmt.Sprintf("Undefined EvtCodT: %d", evtCod)
	}//switch
	return
}//String




/*
.type ButCodT:
*/
type ButCodT byte
const(
	BUT_COD_LFT ButCodT = iota+1
	BUT_COD_WHEEL
	BUT_COD_RT
	BUT_COD_WHEEL_UP
	BUT_COD_WHEEL_DOWN
	BUT_COD_6
	BUT_COD_7
	BUT_COD_LFT_SIDE_UP
	BUT_COD_LFT_SIDE_DOWN
)
func(butCod ButCodT)String()string{
	switch butCod{
	case BUT_COD_LFT:
		return "BUT_COD_LFT"
	case BUT_COD_WHEEL:
		return "BUT_COD_WHEEL"
	case BUT_COD_RT:
		return "BUT_COD_RT"
	case BUT_COD_WHEEL_UP:
		return "BUT_COD_WHEEL_UP"
	case BUT_COD_WHEEL_DOWN:
		return "BUT_COD_WHEEL_DOWN"
	case BUT_COD_6:
		return "BUT_COD_6"
	case BUT_COD_7:
		return "BUT_COD_7"
	case BUT_COD_LFT_SIDE_UP:
		return "BUT_COD_LFT_SIDE_UP"
	case BUT_COD_LFT_SIDE_DOWN:
		return "BUT_COD_LFT_SIDE_DOWN"
	default:
		return fmt.Sprintf("Undefined ButCodT: %d", butCod)
	}
}//String



/*
.type KeyButMskT:
*/
type KeyButMskT uint16
const(
KEY_BTN_MSK_SHIFT KeyButMskT = 1<<iota
KEY_BTN_MSK_LOCK
KEY_BTN_MSK_CONTROL
KEY_BTN_MSK_MOD1
KEY_BTN_MSK_MOD2
KEY_BTN_MSK_MOD3
KEY_BTN_MSK_MOD4
KEY_BTN_MSK_MOD5
KEY_BTN_MSK_BTN1
KEY_BTN_MSK_BTN2
KEY_BTN_MSK_BTN3
KEY_BTN_MSK_BTN4
KEY_BTN_MSK_BTN5
KEY_BTN_MSK_KEY = KEY_BTN_MSK_SHIFT | KEY_BTN_MSK_LOCK | KEY_BTN_MSK_CONTROL | KEY_BTN_MSK_MOD1 | KEY_BTN_MSK_MOD2 | KEY_BTN_MSK_MOD3 | KEY_BTN_MSK_MOD4 | KEY_BTN_MSK_MOD5
KEY_BTN_MSK_BTN = KEY_BTN_MSK_BTN1 | KEY_BTN_MSK_BTN2 | KEY_BTN_MSK_BTN3 | KEY_BTN_MSK_BTN4 | KEY_BTN_MSK_BTN5
)
func(keyButMsk KeyButMskT)String()string{
	mskLst:=[]string{}
	if keyButMsk&KEY_BTN_MSK_SHIFT!=0{mskLst=append(mskLst, "KEY_BTN_MSK_SHIFT")}
	if keyButMsk&KEY_BTN_MSK_LOCK!=0{mskLst=append(mskLst, "KEY_BTN_MSK_LOCK")}
	if keyButMsk&KEY_BTN_MSK_CONTROL!=0{mskLst=append(mskLst, "KEY_BTN_MSK_CONTROL")}
	if keyButMsk&KEY_BTN_MSK_MOD1!=0{mskLst=append(mskLst, "KEY_BTN_MSK_MOD1")}
	if keyButMsk&KEY_BTN_MSK_MOD2!=0{mskLst=append(mskLst, "KEY_BTN_MSK_MOD2")}
	if keyButMsk&KEY_BTN_MSK_MOD3!=0{mskLst=append(mskLst, "KEY_BTN_MSK_MOD3")}
	if keyButMsk&KEY_BTN_MSK_MOD4!=0{mskLst=append(mskLst, "KEY_BTN_MSK_MOD4")}
	if keyButMsk&KEY_BTN_MSK_MOD5!=0{mskLst=append(mskLst, "KEY_BTN_MSK_MOD5")}
	if keyButMsk&KEY_BTN_MSK_BTN1!=0{mskLst=append(mskLst, "KEY_BTN_MSK_BTN1")}
	if keyButMsk&KEY_BTN_MSK_BTN2!=0{mskLst=append(mskLst, "KEY_BTN_MSK_BTN2")}
	if keyButMsk&KEY_BTN_MSK_BTN3!=0{mskLst=append(mskLst, "KEY_BTN_MSK_BTN3")}
	if keyButMsk&KEY_BTN_MSK_BTN4!=0{mskLst=append(mskLst, "KEY_BTN_MSK_BTN4")}
	if keyButMsk&KEY_BTN_MSK_BTN5!=0{mskLst=append(mskLst, "KEY_BTN_MSK_BTN5")}
	return strings.Join(mskLst, "|")
}//String



/*
.type EntLvDetT:
*/
type EntLvDetT byte
const(
	ENT_LV_ANC EntLvDetT = iota
	ENT_LV_PASS
	ENT_LV_INF
	ENT_LV_NOLIN
	ENT_LV_NOLIN_PASS
)
func(entLvDet EntLvDetT)String()(ret string){
	switch entLvDet{
	case ENT_LV_ANC:
		ret="ENT_LV_ANC"
	case ENT_LV_PASS:
		ret="ENT_LV_PASS"
	case ENT_LV_INF:
		ret="ENT_LV_INF"
	case ENT_LV_NOLIN:
		ret="ENT_LV_NOLIN"
	case ENT_LV_NOLIN_PASS:
		ret="ENT_LV_NOLIN_PASS"
	default:
		ret=fmt.Sprintf("Undefined EntLvDetT: %d", entLvDet)
	}//switch
	return
}//String



/*
.type EntLvModT:
*/
type EntLvModT byte
const(
ENT_LV_MOD_NORMAL EntLvModT = iota
ENT_LV_MOD_GRAB
ENT_LV_MOD_UNGRAB
)
func(entLvMod EntLvModT)String()(ret string){
	switch entLvMod{
	case ENT_LV_MOD_NORMAL:
		ret="ENT_LV_MOD_NORMAL"
	case ENT_LV_MOD_GRAB:
		ret="ENT_LV_MOD_GRAB"
	case ENT_LV_MOD_UNGRAB:
		ret="ENT_LV_MOD_UNGRAB"
	default:
		ret=fmt.Sprintf("Undefined EntLvModT: %d", entLvMod)
	}//switch
	return
}//String



/*
.type WndAttrMskT:
*/
type WndAttrMskT uint32
const(
	CW_MSK_BG_PIXMAP WndAttrMskT = 1<<iota
	CW_MSK_BG_PIX
	CW_MSK_BORD_PIXMAP
	CW_MSK_BORD_PIX
	CW_MSK_BIT_GRAV
	CW_MSK_WND_GRAV
	CW_MSK_COVER_STORE
	CW_MSK_COVER_PLANE
	CW_MSK_COVER_PIX
	CW_MSK_DIRECT
	CW_MSK_SAVE_UNDER
	CW_MSK_EVT_MSK
	CW_MSK_NO_PROPAGATE
	CW_MSK_COLORMAP
	CW_MSK_CURSOR
)
func(cwValMsk WndAttrMskT)String()string{
	if cwValMsk==0{return `No Mask!`}
	mskLst:=[]string{}
	if cwValMsk&CW_MSK_BG_PIXMAP!=0{mskLst=append(mskLst, "CW_MSK_BG_PIXMAP")}
	if cwValMsk&CW_MSK_BG_PIX!=0{mskLst=append(mskLst, "CW_MSK_BG_PIX")}
	if cwValMsk&CW_MSK_BORD_PIXMAP!=0{mskLst=append(mskLst, "CW_MSK_BORD_PIXMAP")}
	if cwValMsk&CW_MSK_BORD_PIX!=0{mskLst=append(mskLst, "CW_MSK_BORD_PIX")}
	if cwValMsk&CW_MSK_BIT_GRAV!=0{mskLst=append(mskLst, "CW_MSK_BIT_GRAV")}
	if cwValMsk&CW_MSK_WND_GRAV!=0{mskLst=append(mskLst, "CW_MSK_WND_GRAV")}
	if cwValMsk&CW_MSK_COVER_STORE!=0{mskLst=append(mskLst, "CW_MSK_COVER_STORE")}
	if cwValMsk&CW_MSK_COVER_PLANE!=0{mskLst=append(mskLst, "CW_MSK_COVER_PLANE")}
	if cwValMsk&CW_MSK_COVER_PIX!=0{mskLst=append(mskLst, "CW_MSK_COVER_PIX")}
	if cwValMsk&CW_MSK_DIRECT!=0{mskLst=append(mskLst, "CW_MSK_DIRECT")}
	if cwValMsk&CW_MSK_SAVE_UNDER!=0{mskLst=append(mskLst, "CW_MSK_SAVE_UNDER")}
	if cwValMsk&CW_MSK_EVT_MSK!=0{mskLst=append(mskLst, "CW_MSK_EVT_MSK")}
	if cwValMsk&CW_MSK_NO_PROPAGATE!=0{mskLst=append(mskLst, "CW_MSK_NO_PROPAGATE")}
	if cwValMsk&CW_MSK_COLORMAP!=0{mskLst=append(mskLst, "CW_MSK_COLORMAP")}
	if cwValMsk&CW_MSK_CURSOR!=0{mskLst=append(mskLst, "CW_MSK_CURSOR")}
	return strings.Join(mskLst, "|")
}//String




/*
.type WndAttrPixMapT:
*/
type WndAttrPixMapT byte
const(
	WND_ATTR_PIXMAP_NONE WndAttrPixMapT = iota
	WND_ATTR_PIXMAP_PARENT
)
func(wndAttrPixMap WndAttrPixMapT)String()string{
	switch wndAttrPixMap{
	case WND_ATTR_PIXMAP_NONE:
		return "WND_ATTR_PIXMAP_NONE"
	case WND_ATTR_PIXMAP_PARENT:
		return "WND_ATTR_PIXMAP_PARENT"
	default:
		return fmt.Sprintf("Undefined WndAttrPixMapT: %d", wndAttrPixMap)
	}//switch
}//String





/*
.type WndAttrCoverStoreT:
*/
type WndAttrCoverStoreT byte
const(
	WND_ATTR_COVER_STORE_NOUSE WndAttrCoverStoreT = iota
	WND_ATTR_COVER_STORE_MAPPED
	WND_ATTR_COVER_STORE_ALWAYS
)
func(wndAttrCoverStore WndAttrCoverStoreT)String()string{
	switch wndAttrCoverStore{
	case WND_ATTR_COVER_STORE_NOUSE:
		return "WND_ATTR_COVER_STORE_NOUSE"
	case WND_ATTR_COVER_STORE_MAPPED:
		return "WND_ATTR_COVER_STORE_MAPPED"
	case WND_ATTR_COVER_STORE_ALWAYS:
		return "WND_ATTR_COVER_STORE_ALWAYS"
	default:
		return fmt.Sprintf("Undefined WndAttrCoverStoreT: %d", wndAttrCoverStore)
	}//switch
}//String




/*
.type EvtMskT:
*/
type EvtMskT uint32
const(
	EVT_MSK_KEY_PRS EvtMskT = 1<<iota // 必须指定了本事件，EVT_MSK_KEY_RLS事件和光标移动类事件才能“知晓”键盘按键按下情况
	EVT_MSK_KEY_RLS
	EVT_MSK_BTN_PRS //必须指定本事件，EVT_MSK_BTN_RLS事件和光标移动类事件才能“知晓”鼠标按键按下情况
	EVT_MSK_BTN_RLS
	EVT_MSK_ENT
	EVT_MSK_LV
	EVT_MSK_POINT_MOTION // 充分利用计算机性能尽可能多地向用户发送光标移动事件
	EVT_MSK_POINT_MOTION_HINT // (必须同时指定EVT_MSK_POINT_MOTION才有效)只在KeyButMskT指定的按键发生改变、光标离开窗口或用户主动请求光标移动事件时，才向用户发送光标移动事件
	EVT_MSK_BTN_1_MOTION
	EVT_MSK_BTN_2_MOTION
	EVT_MSK_BTN_3_MOTION
	EVT_MSK_BTN_4_MOTION
	EVT_MSK_BTN_5_MOTION
	EVT_MSK_BTN_MOTION
	EVT_MSK_KEYMAP_STATE//当窗口获得输入焦点或光标移入窗口时，向窗口发送本事件，本事件数据只有一个31byte的bitmap，记录了当前按下的所有键盘按键，每bit对应一个按键。由于键盘本身原因，当同时按下多个按键时并非总是能识别所有按下的按键，这大概就是所谓的“按键冲突”。
	EVT_MSK_EXPOSE
	EVT_MSK_OBSCURE_CHG
	EVT_MSK_STRUCT
	EVT_MSK_RESIZE_REDRCT
	EVT_MSK_SUBSTRUCT
	EVT_MSK_SUBSTRUCT_REDRCT
	EVT_MSK_FOCUS
	EVT_MSK_PROPER
	EVT_MSK_COLORMAP
	EVT_MSK_OWNER_GRAB_BTN
	EVT_MSK_MOUSE = EVT_MSK_BTN_PRS | EVT_MSK_BTN_RLS | EVT_MSK_ENT | EVT_MSK_LV | EVT_MSK_POINT_MOTION | EVT_MSK_POINT_MOTION_HINT | EVT_MSK_BTN_1_MOTION | EVT_MSK_BTN_2_MOTION | EVT_MSK_BTN_3_MOTION | EVT_MSK_BTN_4_MOTION | EVT_MSK_BTN_5_MOTION | EVT_MSK_BTN_MOTION | EVT_MSK_KEYMAP_STATE
	EVT_MSK_DEV = EVT_MSK_KEY_PRS | EVT_MSK_KEY_RLS | EVT_MSK_BTN_PRS | EVT_MSK_BTN_RLS | EVT_MSK_POINT_MOTION | EVT_MSK_BTN_1_MOTION | EVT_MSK_BTN_2_MOTION | EVT_MSK_BTN_3_MOTION | EVT_MSK_BTN_4_MOTION | EVT_MSK_BTN_5_MOTION | EVT_MSK_BTN_MOTION

)
func(evtMsk EvtMskT)String()string{
	if evtMsk==0{return `No Event!`}
	evLst:=[]string{}
	if evtMsk&EVT_MSK_KEY_PRS!=0{evLst=append(evLst, "EVT_MSK_KEY_PRS")}
	if evtMsk&EVT_MSK_KEY_RLS!=0{evLst=append(evLst, "EVT_MSK_KEY_RLS")}
	if evtMsk&EVT_MSK_BTN_PRS!=0{evLst=append(evLst, "EVT_MSK_BTN_PRS")}
	if evtMsk&EVT_MSK_BTN_RLS!=0{evLst=append(evLst, "EVT_MSK_BTN_RLS")}
	if evtMsk&EVT_MSK_ENT!=0{evLst=append(evLst, "EVT_MSK_ENT")}
	if evtMsk&EVT_MSK_LV!=0{evLst=append(evLst, "EVT_MSK_LV")}
	if evtMsk&EVT_MSK_POINT_MOTION!=0{evLst=append(evLst, "EVT_MSK_POINT_MOTION")}
	if evtMsk&EVT_MSK_POINT_MOTION_HINT!=0{evLst=append(evLst, "EVT_MSK_POINT_MOTION_HINT")}
	if evtMsk&EVT_MSK_BTN_1_MOTION!=0{evLst=append(evLst, "EVT_MSK_BTN_1_MOTION")}
	if evtMsk&EVT_MSK_BTN_2_MOTION!=0{evLst=append(evLst, "EVT_MSK_BTN_2_MOTION")}
	if evtMsk&EVT_MSK_BTN_3_MOTION!=0{evLst=append(evLst, "EVT_MSK_BTN_3_MOTION")}
	if evtMsk&EVT_MSK_BTN_4_MOTION!=0{evLst=append(evLst, "EVT_MSK_BTN_4_MOTION")}
	if evtMsk&EVT_MSK_BTN_5_MOTION!=0{evLst=append(evLst, "EVT_MSK_BTN_5_MOTION")}
	if evtMsk&EVT_MSK_BTN_MOTION!=0{evLst=append(evLst, "EVT_MSK_BTN_MOTION")}
	if evtMsk&EVT_MSK_KEYMAP_STATE!=0{evLst=append(evLst, "EVT_MSK_KEYMAP_STATE")}
	if evtMsk&EVT_MSK_EXPOSE!=0{evLst=append(evLst, "EVT_MSK_EXPOSE")}
	if evtMsk&EVT_MSK_OBSCURE_CHG!=0{evLst=append(evLst, "EVT_MSK_OBSCURE_CHG")}
	if evtMsk&EVT_MSK_STRUCT!=0{evLst=append(evLst, "EVT_MSK_STRUCT")}
	if evtMsk&EVT_MSK_RESIZE_REDRCT!=0{evLst=append(evLst, "EVT_MSK_RESIZE_REDRCT")}
	if evtMsk&EVT_MSK_SUBSTRUCT!=0{evLst=append(evLst, "EVT_MSK_SUBSTRUCT")}
	if evtMsk&EVT_MSK_SUBSTRUCT_REDRCT!=0{evLst=append(evLst, "EVT_MSK_SUBSTRUCT_REDRCT")}
	if evtMsk&EVT_MSK_FOCUS!=0{evLst=append(evLst, "EVT_MSK_FOCUS")}
	if evtMsk&EVT_MSK_PROPER!=0{evLst=append(evLst, "EVT_MSK_PROPER")}
	if evtMsk&EVT_MSK_COLORMAP!=0{evLst=append(evLst, "EVT_MSK_COLORMAP")}
	if evtMsk&EVT_MSK_OWNER_GRAB_BTN!=0{evLst=append(evLst, "EVT_MSK_OWNER_GRAB_BTN")}
	return strings.Join(evLst, "|")
}//String




/*
.type WndGravT:
*/
type WndGravT byte
const(
	WND_GRAV_UNMAP WndGravT = iota//当父窗口Resize时本窗口Unmap
	WND_GRAV_TOP_LFT
	WND_GRAV_TOP
	WND_GRAV_TOP_RT
	WND_GRAV_LFT
	WND_GRAV_CENTER
	WND_GRAV_RT
	WND_GRAV_BTM_LFT
	WND_GRAV_BTM
	WND_GRAV_BTM_RT
	WND_GRAV_STATIC
)
func(wndGrav WndGravT)String()(ret string){
	switch wndGrav{
	case WND_GRAV_UNMAP:
		ret="WND_GRAV_UNMAP"
	case WND_GRAV_TOP_LFT:
		ret="WND_GRAV_TOP_LFT"
	case WND_GRAV_TOP:
		ret="WND_GRAV_TOP"
	case WND_GRAV_TOP_RT:
		ret="WND_GRAV_TOP_RT"
	case WND_GRAV_LFT:
		ret="WND_GRAV_LFT"
	case WND_GRAV_CENTER:
		ret="WND_GRAV_CENTER"
	case WND_GRAV_RT:
		ret="WND_GRAV_RT"
	case WND_GRAV_BTM_LFT:
		ret="WND_GRAV_BTM_LFT"
	case WND_GRAV_BTM:
		ret="WND_GRAV_BTM"
	case WND_GRAV_BTM_RT:
		ret="WND_GRAV_BTM_RT"
	case WND_GRAV_STATIC:
		ret="WND_GRAV_STATIC"
	default:
		ret=fmt.Sprintf("Undefined WndGravT: %d", wndGrav)
	}//switch
	return
}//String



/*
.type BitGravT:
*/
type BitGravT byte
const(
	BIT_GRAV_FORGET BitGravT = iota
	BIT_GRAV_TOP_LFT
	BIT_GRAV_TOP
	BIT_GRAV_TOP_RT
	BIT_GRAV_LFT
	BIT_GRAV_CENTER
	BIT_GRAV_RT
	BIT_GRAV_BTM_LFT
	BIT_GRAV_BTM
	BIT_GRAV_BTM_RT
	BIT_GRAV_STATIC
)
func(bitGrav BitGravT)String()(ret string){
	switch bitGrav{
	case BIT_GRAV_FORGET:
		ret="BIT_GRAV_FORGET"
	case BIT_GRAV_TOP_LFT:
		ret="BIT_GRAV_TOP_LFT"
	case BIT_GRAV_TOP:
		ret="BIT_GRAV_TOP"
	case BIT_GRAV_TOP_RT:
		ret="BIT_GRAV_TOP_RT"
	case BIT_GRAV_LFT:
		ret="BIT_GRAV_LFT"
	case BIT_GRAV_CENTER:
		ret="BIT_GRAV_CENTER"
	case BIT_GRAV_RT:
		ret="BIT_GRAV_RT"
	case BIT_GRAV_BTM_LFT:
		ret="BIT_GRAV_BTM_LFT"
	case BIT_GRAV_BTM:
		ret="BIT_GRAV_BTM"
	case BIT_GRAV_BTM_RT:
		ret="BIT_GRAV_BTM_RT"
	case BIT_GRAV_STATIC:
		ret="BIT_GRAV_STATIC"
	default:
		ret=fmt.Sprintf("Undefined BitGravT: %d", bitGrav)
	}//switch
	return
}//String



/*
.type BackStoreT:
*/
type BackStoreT byte
const(
	BACK_STORE_NO BackStoreT = iota
	BACK_STORE_MAPPED
	BACK_STORE_ALWAYS
)
func(backStore BackStoreT)String()(ret string){
	switch backStore{
	case BACK_STORE_NO:
		ret="BACK_STORE_NO"
	case BACK_STORE_MAPPED:
		ret="BACK_STORE_MAPPED"
	case BACK_STORE_ALWAYS:
		ret="BACK_STORE_ALWAYS"
	default:
		ret=fmt.Sprintf("Undefined BackStoreT: %d", backStore)
	}//switch
	return
}//String



/*
.type WndClsT:
*/
type WndClsT uint16
const(
	WND_CLS_PARENT WndClsT = iota
	WND_CLS_IN_OUT
	WND_CLS_IN
)
func(cls WndClsT)String()(ret string){
	switch cls{
	case WND_CLS_PARENT:
		ret="WND_CLS_PARENT"
	case WND_CLS_IN_OUT:
		ret="WND_CLS_IN_OUT"
	case WND_CLS_IN:
		ret="WND_CLS_IN"
	default:
		ret=fmt.Sprintf("Undefined WndClsT: %d", cls)
	}
	return
}//String




/*
.const ERR_:
*/
const(
	ERR_RQST = iota+1
	ERR_VAL
	ERR_WND
	ERR_PIXMAP
	ERR_ATM
	ERR_CURSOR
	ERR_FONT
	ERR_MATCH
	ERR_DRAWABLE
	ERR_ACCESS
	ERR_ALLOC
	ERR_COLORMAP
	ERR_GC
	ERR_ID
	ERR_NAME
	ERR_LEN
	ERR_IMPLEMENT	
)









/*
.type KeyCodT:
*/
type KeyCodT byte
const(
	KEY_COD_ESC KeyCodT = iota+9
	KEY_COD_NUM1
	KEY_COD_NUM2
	KEY_COD_NUM3
	KEY_COD_NUM4
	KEY_COD_NUM5
	KEY_COD_NUM6
	KEY_COD_NUM7
	KEY_COD_NUM8
	KEY_COD_NUM9
	KEY_COD_NUM0
	KEY_COD_SUB
	KEY_COD_ADD
	KEY_COD_BACK
	KEY_COD_TAB
	KEY_COD_Q
	KEY_COD_W
	KEY_COD_E
	KEY_COD_R
	KEY_COD_T
	KEY_COD_Y
	KEY_COD_U
	KEY_COD_I
	KEY_COD_O
	KEY_COD_P
	KEY_COD_LFT_SQUARE
	KEY_COD_RT_SQUARE
	KEY_COD_ENTER
	KEY_COD_LFT_CTRL
	KEY_COD_A
	KEY_COD_S
	KEY_COD_D
	KEY_COD_F
	KEY_COD_G
	KEY_COD_H
	KEY_COD_J
	KEY_COD_K
	KEY_COD_L
	KEY_COD_COLON
	KEY_COD_QUOT
	KEY_COD_BACK_QUOT
	KEY_COD_LFT_SHIFT
	KEY_COD_BACK_SLASH
	KEY_COD_Z
	KEY_COD_X
	KEY_COD_C
	KEY_COD_V
	KEY_COD_B
	KEY_COD_N
	KEY_COD_M
	KEY_COD_COMMA
	KEY_COD_DOT
	KEY_COD_SLASH
	KEY_COD_RT_SHIFT
	KEY_COD_PAD_STAR
	KEY_COD_LFT_ALT
	KEY_COD_SPACE
	KEY_COD_CAP
	KEY_COD_F1
	KEY_COD_F2
	KEY_COD_F3
	KEY_COD_F4
	KEY_COD_F5
	KEY_COD_F6
	KEY_COD_F7
	KEY_COD_F8
	KEY_COD_F9
	KEY_COD_F10
	KEY_COD_NUM_LOCK
	KEY_COD_SCROOL_LOCK
	KEY_COD_PAD_7
	KEY_COD_PAD_8
	KEY_COD_PAD_9
	KEY_COD_PAD_SUB
	KEY_COD_PAD_4
	KEY_COD_PAD_5
	KEY_COD_PAD_6
	KEY_COD_PAD_ADD
	KEY_COD_PAD_1
	KEY_COD_PAD_2
	KEY_COD_PAD_3
	KEY_COD_PAD_0
	KEY_COD_PAD_DOT
	KEY_COD_92
	KEY_COD_93
	KEY_COD_94
	KEY_COD_F11
	KEY_COD_F12
	KEY_COD_97
	KEY_COD_98
	KEY_COD_99
	KEY_COD_100
	KEY_COD_101
	KEY_COD_102
	KEY_COD_103
	KEY_COD_PAD_ENTER
	KEY_COD_RT_CTRL
	KEY_COD_PAD_SLASH
	KEY_COD_PRTSC
	KEY_COD_RT_ALT
	KEY_COD_109
	KEY_COD_HOME
	KEY_COD_UP
	KEY_COD_PAGE_UP
	KEY_COD_LFT
	KEY_COD_RT
	KEY_COD_END
	KEY_COD_DOWN
	KEY_COD_PAGE_DOWN
	KEY_COD_INS
	KEY_COD_DEL
	KEY_COD_120
	KEY_COD_121
	KEY_COD_122
	KEY_COD_123
	KEY_COD_124
	KEY_COD_125
	KEY_COD_126
	KEY_COD_PAUSE_BREAK
	KEY_COD_128
	KEY_COD_129
	KEY_COD_130
	KEY_COD_131
	KEY_COD_132
	KEY_COD_LFT_WIN
	KEY_COD_RT_WIN
	KEY_COD_135
	KEY_COD_136
	KEY_COD_137
	KEY_COD_138
	KEY_COD_139
	KEY_COD_140
	KEY_COD_141
	KEY_COD_142
	KEY_COD_143
	KEY_COD_144
	KEY_COD_145
	KEY_COD_146
	KEY_COD_147
	KEY_COD_148
	KEY_COD_149
	KEY_COD_150
	KEY_COD_151
	KEY_COD_152
	KEY_COD_153
	KEY_COD_154
	KEY_COD_155
	KEY_COD_156
	KEY_COD_157
	KEY_COD_158
	KEY_COD_159
	KEY_COD_160
	KEY_COD_161
	KEY_COD_162
	KEY_COD_163
	KEY_COD_164
	KEY_COD_165
	KEY_COD_166
	KEY_COD_167
	KEY_COD_168
	KEY_COD_169
	KEY_COD_170
	KEY_COD_FN_F3
	KEY_COD_FN_F2
	KEY_COD_FN_F1
	KEY_COD_FN_F4
)//KeyCodT
func(keyCod KeyCodT)String()(ret string){
	switch keyCod{
	case KEY_COD_ESC:
		ret="KEY_COD_ESC"
	case KEY_COD_NUM1:
		ret="KEY_COD_NUM1"
	case KEY_COD_NUM2:
		ret="KEY_COD_NUM2"
	case KEY_COD_NUM3:
		ret="KEY_COD_NUM3"
	case KEY_COD_NUM4:
		ret="KEY_COD_NUM4"
	case KEY_COD_NUM5:
		ret="KEY_COD_NUM5"
	case KEY_COD_NUM6:
		ret="KEY_COD_NUM6"
	case KEY_COD_NUM7:
		ret="KEY_COD_NUM7"
	case KEY_COD_NUM8:
		ret="KEY_COD_NUM8"
	case KEY_COD_NUM9:
		ret="KEY_COD_NUM9"
	case KEY_COD_NUM0:
		ret="KEY_COD_NUM0"
	case KEY_COD_SUB:
		ret="KEY_COD_SUB"
	case KEY_COD_ADD:
		ret="KEY_COD_ADD"
	case KEY_COD_BACK:
		ret="KEY_COD_BACK"
	case KEY_COD_TAB:
		ret="KEY_COD_TAB"
	case KEY_COD_Q:
		ret="KEY_COD_Q"
	case KEY_COD_W:
		ret="KEY_COD_W"
	case KEY_COD_E:
		ret="KEY_COD_E"
	case KEY_COD_R:
		ret="KEY_COD_R"
	case KEY_COD_T:
		ret="KEY_COD_T"
	case KEY_COD_Y:
		ret="KEY_COD_Y"
	case KEY_COD_U:
		ret="KEY_COD_U"
	case KEY_COD_I:
		ret="KEY_COD_I"
	case KEY_COD_O:
		ret="KEY_COD_O"
	case KEY_COD_P:
		ret="KEY_COD_P"
	case KEY_COD_LFT_SQUARE:
		ret="KEY_COD_LFT_SQUARE"
	case KEY_COD_RT_SQUARE:
		ret="KEY_COD_RT_SQUARE"
	case KEY_COD_ENTER:
		ret="KEY_COD_ENTER"
	case KEY_COD_LFT_CTRL:
		ret="KEY_COD_LFT_CTRL"
	case KEY_COD_A:
		ret="KEY_COD_A"
	case KEY_COD_S:
		ret="KEY_COD_S"
	case KEY_COD_D:
		ret="KEY_COD_D"
	case KEY_COD_F:
		ret="KEY_COD_F"
	case KEY_COD_G:
		ret="KEY_COD_G"
	case KEY_COD_H:
		ret="KEY_COD_H"
	case KEY_COD_J:
		ret="KEY_COD_J"
	case KEY_COD_K:
		ret="KEY_COD_K"
	case KEY_COD_L:
		ret="KEY_COD_L"
	case KEY_COD_COLON:
		ret="KEY_COD_COLON"
	case KEY_COD_QUOT:
		ret="KEY_COD_QUOT"
	case KEY_COD_BACK_QUOT:
		ret="KEY_COD_BACK_QUOT"
	case KEY_COD_LFT_SHIFT:
		ret="KEY_COD_LFT_SHIFT"
	case KEY_COD_BACK_SLASH:
		ret="KEY_COD_BACK_SLASH"
	case KEY_COD_Z:
		ret="KEY_COD_Z"
	case KEY_COD_X:
		ret="KEY_COD_X"
	case KEY_COD_C:
		ret="KEY_COD_C"
	case KEY_COD_V:
		ret="KEY_COD_V"
	case KEY_COD_B:
		ret="KEY_COD_B"
	case KEY_COD_N:
		ret="KEY_COD_N"
	case KEY_COD_M:
		ret="KEY_COD_M"
	case KEY_COD_COMMA:
		ret="KEY_COD_COMMA"
	case KEY_COD_DOT:
		ret="KEY_COD_DOT"
	case KEY_COD_SLASH:
		ret="KEY_COD_SLASH"
	case KEY_COD_RT_SHIFT:
		ret="KEY_COD_RT_SHIFT"
	case KEY_COD_PAD_STAR:
		ret="KEY_COD_PAD_STAR"
	case KEY_COD_LFT_ALT:
		ret="KEY_COD_LFT_ALT"
	case KEY_COD_SPACE:
		ret="KEY_COD_SPACE"
	case KEY_COD_CAP:
		ret="KEY_COD_CAP"
	case KEY_COD_F1:
		ret="KEY_COD_F1"
	case KEY_COD_F2:
		ret="KEY_COD_F2"
	case KEY_COD_F3:
		ret="KEY_COD_F3"
	case KEY_COD_F4:
		ret="KEY_COD_F4"
	case KEY_COD_F5:
		ret="KEY_COD_F5"
	case KEY_COD_F6:
		ret="KEY_COD_F6"
	case KEY_COD_F7:
		ret="KEY_COD_F7"
	case KEY_COD_F8:
		ret="KEY_COD_F8"
	case KEY_COD_F9:
		ret="KEY_COD_F9"
	case KEY_COD_F10:
		ret="KEY_COD_F10"
	case KEY_COD_NUM_LOCK:
		ret="KEY_COD_NUM_LOCK"
	case KEY_COD_SCROOL_LOCK:
		ret="KEY_COD_SCROOL_LOCK"
	case KEY_COD_PAD_7:
		ret="KEY_COD_PAD_7"
	case KEY_COD_PAD_8:
		ret="KEY_COD_PAD_8"
	case KEY_COD_PAD_9:
		ret="KEY_COD_PAD_9"
	case KEY_COD_PAD_SUB:
		ret="KEY_COD_PAD_SUB"
	case KEY_COD_PAD_4:
		ret="KEY_COD_PAD_4"
	case KEY_COD_PAD_5:
		ret="KEY_COD_PAD_5"
	case KEY_COD_PAD_6:
		ret="KEY_COD_PAD_6"
	case KEY_COD_PAD_ADD:
		ret="KEY_COD_PAD_ADD"
	case KEY_COD_PAD_1:
		ret="KEY_COD_PAD_1"
	case KEY_COD_PAD_2:
		ret="KEY_COD_PAD_2"
	case KEY_COD_PAD_3:
		ret="KEY_COD_PAD_3"
	case KEY_COD_PAD_0:
		ret="KEY_COD_PAD_0"
	case KEY_COD_PAD_DOT:
		ret="KEY_COD_PAD_DOT"
	case KEY_COD_92:
		ret="KEY_COD_92"
	case KEY_COD_93:
		ret="KEY_COD_93"
	case KEY_COD_94:
		ret="KEY_COD_94"
	case KEY_COD_F11:
		ret="KEY_COD_F11"
	case KEY_COD_F12:
		ret="KEY_COD_F12"
	case KEY_COD_97:
		ret="KEY_COD_97"
	case KEY_COD_98:
		ret="KEY_COD_98"
	case KEY_COD_99:
		ret="KEY_COD_99"
	case KEY_COD_100:
		ret="KEY_COD_100"
	case KEY_COD_101:
		ret="KEY_COD_101"
	case KEY_COD_102:
		ret="KEY_COD_102"
	case KEY_COD_103:
		ret="KEY_COD_103"
	case KEY_COD_PAD_ENTER:
		ret="KEY_COD_PAD_ENTER"
	case KEY_COD_RT_CTRL:
		ret="KEY_COD_RT_CTRL"
	case KEY_COD_PAD_SLASH:
		ret="KEY_COD_PAD_SLASH"
	case KEY_COD_PRTSC:
		ret="KEY_COD_PRTSC"
	case KEY_COD_RT_ALT:
		ret="KEY_COD_RT_ALT"
	case KEY_COD_109:
		ret="KEY_COD_109"
	case KEY_COD_HOME:
		ret="KEY_COD_HOME"
	case KEY_COD_UP:
		ret="KEY_COD_UP"
	case KEY_COD_PAGE_UP:
		ret="KEY_COD_PAGE_UP"
	case KEY_COD_LFT:
		ret="KEY_COD_LFT"
	case KEY_COD_RT:
		ret="KEY_COD_RT"
	case KEY_COD_END:
		ret="KEY_COD_END"
	case KEY_COD_DOWN:
		ret="KEY_COD_DOWN"
	case KEY_COD_PAGE_DOWN:
		ret="KEY_COD_PAGE_DOWN"
	case KEY_COD_INS:
		ret="KEY_COD_INS"
	case KEY_COD_DEL:
		ret="KEY_COD_DEL"
	case KEY_COD_120:
		ret="KEY_COD_120"
	case KEY_COD_121:
		ret="KEY_COD_121"
	case KEY_COD_122:
		ret="KEY_COD_122"
	case KEY_COD_123:
		ret="KEY_COD_123"
	case KEY_COD_124:
		ret="KEY_COD_124"
	case KEY_COD_125:
		ret="KEY_COD_125"
	case KEY_COD_126:
		ret="KEY_COD_126"
	case KEY_COD_PAUSE_BREAK:
		ret="KEY_COD_PAUSE_BREAK"
	case KEY_COD_128:
		ret="KEY_COD_128"
	case KEY_COD_129:
		ret="KEY_COD_129"
	case KEY_COD_130:
		ret="KEY_COD_130"
	case KEY_COD_131:
		ret="KEY_COD_131"
	case KEY_COD_132:
		ret="KEY_COD_132"
	case KEY_COD_LFT_WIN:
		ret="KEY_COD_LFT_WIN"
	case KEY_COD_RT_WIN:
		ret="KEY_COD_RT_WIN"
	case KEY_COD_135:
		ret="KEY_COD_135"
	case KEY_COD_136:
		ret="KEY_COD_136"
	case KEY_COD_137:
		ret="KEY_COD_137"
	case KEY_COD_138:
		ret="KEY_COD_138"
	case KEY_COD_139:
		ret="KEY_COD_139"
	case KEY_COD_140:
		ret="KEY_COD_140"
	case KEY_COD_141:
		ret="KEY_COD_141"
	case KEY_COD_142:
		ret="KEY_COD_142"
	case KEY_COD_143:
		ret="KEY_COD_143"
	case KEY_COD_144:
		ret="KEY_COD_144"
	case KEY_COD_145:
		ret="KEY_COD_145"
	case KEY_COD_146:
		ret="KEY_COD_146"
	case KEY_COD_147:
		ret="KEY_COD_147"
	case KEY_COD_148:
		ret="KEY_COD_148"
	case KEY_COD_149:
		ret="KEY_COD_149"
	case KEY_COD_150:
		ret="KEY_COD_150"
	case KEY_COD_151:
		ret="KEY_COD_151"
	case KEY_COD_152:
		ret="KEY_COD_152"
	case KEY_COD_153:
		ret="KEY_COD_153"
	case KEY_COD_154:
		ret="KEY_COD_154"
	case KEY_COD_155:
		ret="KEY_COD_155"
	case KEY_COD_156:
		ret="KEY_COD_156"
	case KEY_COD_157:
		ret="KEY_COD_157"
	case KEY_COD_158:
		ret="KEY_COD_158"
	case KEY_COD_159:
		ret="KEY_COD_159"
	case KEY_COD_160:
		ret="KEY_COD_160"
	case KEY_COD_161:
		ret="KEY_COD_161"
	case KEY_COD_162:
		ret="KEY_COD_162"
	case KEY_COD_163:
		ret="KEY_COD_163"
	case KEY_COD_164:
		ret="KEY_COD_164"
	case KEY_COD_165:
		ret="KEY_COD_165"
	case KEY_COD_166:
		ret="KEY_COD_166"
	case KEY_COD_167:
		ret="KEY_COD_167"
	case KEY_COD_168:
		ret="KEY_COD_168"
	case KEY_COD_169:
		ret="KEY_COD_169"
	case KEY_COD_170:
		ret="KEY_COD_170"
	case KEY_COD_FN_F3:
		ret="KEY_COD_FN_F3"
	case KEY_COD_FN_F2:
		ret="KEY_COD_FN_F2"
	case KEY_COD_FN_F1:
		ret="KEY_COD_FN_F1"
	case KEY_COD_FN_F4:
		ret="KEY_COD_FN_F4"
	default:
		ret=fmt.Sprintf("Undefined KeyCodT: %d", keyCod)
	}//switch
	return
}//String








/*
.type FocusStatT:
*/
type FocusStatT byte
const(
	FOCUS_STAT_ANC FocusStatT = iota
	FOCUS_STAT_VIR
	FOCUS_STAT_INF
	FOCUS_STAT_NONLINEAR
	FOCUS_STAT_NONLINEAR_VIR
	FOCUS_STAT_POINTER
	FOCUS_STAT_POINTER_ROOT
	FOCUS_STAT_NONE
)
func(focusStat FocusStatT)String()string{
	switch focusStat{
	case FOCUS_STAT_ANC:
		return "FOCUS_STAT_ANC"
	case FOCUS_STAT_VIR:
		return "FOCUS_STAT_VIR"
	case FOCUS_STAT_INF:
		return "FOCUS_STAT_INF"
	case FOCUS_STAT_NONLINEAR:
		return "FOCUS_STAT_NONLINEAR"
	case FOCUS_STAT_NONLINEAR_VIR:
		return "FOCUS_STAT_NONLINEAR_VIR"
	case FOCUS_STAT_POINTER:
		return "FOCUS_STAT_POINTER"
	case FOCUS_STAT_POINTER_ROOT:
		return "FOCUS_STAT_POINTER_ROOT"
	case FOCUS_STAT_NONE:
		return "FOCUS_STAT_NONE"
	default:
		return fmt.Sprintf("Undefined FocusStatT: %d", focusStat)
	}
}//String




/*
.type FocusModT:
*/
type FocusModT byte
const(
	FOCUS_MOD_NORMAL FocusModT = iota
	FOCUS_MOD_GRAB
	FOCUS_MOD_UNGRAB
	FOCUS_MOD_WHILE_GRABBED
)
func(focusMod FocusModT)String()string{
	switch focusMod{
	case FOCUS_MOD_NORMAL:
		return "FOCUS_MOD_NORMAL"
	case FOCUS_MOD_GRAB:
		return "FOCUS_MOD_GRAB"
	case FOCUS_MOD_UNGRAB:
		return "FOCUS_MOD_UNGRAB"
	case FOCUS_MOD_WHILE_GRABBED:
		return "FOCUS_MOD_WHILE_GRABBED"
	default:
		return fmt.Sprintf("Undefined FocustModT: %d", focusMod)
	}
}//String






/*
.type ObscureChgStatT:
*/
type ObscureChgStatT byte
const(
	//可见(visible)指窗口已被影射且不处于最小化状态；
	//不可见(unvisible)指窗口未影射或处于最小化状态。
	//模糊(obscured)只能发生在可见窗口上，当窗口为可见时，理论上整个窗口的数据都应该保存在屏幕显存中；
	//但是当窗口被其它窗口遮盖且相关设置使窗口在被遮盖时不会继续保存被遮盖数据，则被遮盖部分数据会从屏幕显存中被删除，此时我们说被删除部分为模糊(obscured)
	UNOBSCURED ObscureChgStatT = iota//窗口变为全部未模糊
	PART_OBSCURED//窗口变为部分模糊
	FULL_OBSCURED//窗口变为全部模糊
	//有时即使窗口被其它窗口遮盖或从被遮盖状态变为置顶状态，也不会生成相关事件，是因为相关设置使窗口在被遮盖时不模糊，这些相关设置在没有被明确指定的情况下，是由XWindow的窗口管理器(Window Manager)控制的。包括窗口有时候有阴影有时候又没有阴影，都是窗口管理器搞的鬼。
)
func(obscureChangeStat ObscureChgStatT)String()string{
	switch obscureChangeStat{
	case UNOBSCURED:
		return "UNOBSCURED"
	case PART_OBSCURED:
		return "PART_OBSCURED"
	case FULL_OBSCURED:
		return "FULL_OBSCURED"
	default:
		return fmt.Sprintf("Undefined ObscureChgStatT: %d", obscureChangeStat)
	}
}//String